
// m 行修饰符
; (function () {
    return
    var result = "I\nlove\njavascript".replace(/^|$/g, '#');
    console.log(result);//==>这里就没有分行
    // #I
    // love
    // javascript#

    var result2 = "I\nlove\njavascript".replace(/^|$/gm, '#');
    console.log(result2);//==>这里就没有分行
    // #I#
    // #love#
    // #javascript#
})();

// \b是单词边界 ==> \w和\W边界的位置
; (function () {
    return
    // \b 是单词边界，具体就是 \w 与 \W 之间的位置，也包括 \w 与 ^ 之间的位置，和 \w 与 $ 之间的位置。
    // 比如考察文件名 "[JS] Lesson_01.mp4" 中的 \b，如下：
    var result = "[JS] Lesson_01.mp4".replace(/\b/g, '#');
    console.log(result);
    // => [#JS#] #Lesson_01#.#mp4#



    // 现在看的是\B
    // 非单词边界。例如在字符串中所有位置中，扣掉 \b，剩下的都是 \B 的。
    // 具体说来就是 \w 与 \w、 \W 与 \W、^ 与 \W，\W 与 $ 之间的位置。
    // 比如上面的例子，把所有 \B 替换成 "#"：
    var result = "[JS] Lesson_01.mp4".replace(/\B/g, '#');
    console.log(result);
    // => "#[J#S]# L#e#s#s#o#n#_#0#1.m#p#4"
})();

// (?=p) 和 (?!p) 匹配位置
; (function () {
    return
    //  (?=p)，其中 p 是一个子模式，即 p 前面的位置，
    // 或者说，该位置后面的字符要匹配 p。
    // 比如 (?=l)，表示 "l" 字符前面的位置，例如：
    var result = "hello".replace(/(?=l)/g, '#');
    console.log(result);
    // => "he#l#lo"

    // e前面的位置
    var result = "hello".replace(/(?=e)/g, '#');
    console.log(result);
    // => h#ello
})();

; (function () {
    //return
    var regex = /(?!^[0-9]{1,12}$)^[0-9A-Za-z]{1,12}$/;
    console.log(regex.test("12a")); // false 全是数字
})();